package com.redsoft.spirit.filter;

import java.util.HashMap;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

//@Component
//@Aspect  
public class AuthDataAspect {  
//  
//	//匹配com.zkn.learnspringboot.web.controller包及其子包下的所有类的所有方法  
//	@Pointcut("execution(* com.zkn.learnspringboot.web.controller..*.*(..))")  
//	public void executeService(){  
//	  
//	}
	
	/** 
	 * 环绕通知： 
	 *   环绕通知非常强大，可以决定目标方法是否执行，什么时候执行，执行时是否需要替换方法参数，执行完毕是否需要替换返回值。 
	 *   环绕通知第一个参数必须是org.aspectj.lang.ProceedingJoinPoint类型 
	 */  
	@Around("execution( java.util.HashMap com.redsoft.spirit.dao.BaseRepository+.*(..))")  
	public Object doAroundAdvice(ProceedingJoinPoint proceedingJoinPoint){  
	    System.out.println("环绕通知的目标方法名："+proceedingJoinPoint.getSignature().getName());
	    Object[] args = proceedingJoinPoint.getArgs(); //获取切入到的方法的参数数组
	    System.out.println(args);
	    try { 
	        Object obj = proceedingJoinPoint.proceed();  
	        return obj;
	    } catch (Throwable throwable) {  
	        throwable.printStackTrace();  
	    }  
	    return null;
	}  
}  